Op deze pagina vind je een demonstratie van een statistische techniek aan de hand van een voorbeeld.

Meer informatie over hoe je deze pagina kan gebruiken vind je in deze handleiding.

De analyse gebeurt met behulp van R en RStudio. Een inleiding tot deze software vind je hier.



1 Doel

Het is een goed idee om een dataset te verkennen, vooraleer je er allerlei statistische technieken op loslaat. R biedt een heel uitgebreid gamma aan functies om dat te doen.

De output van die functies dient vaak niet om te publiceren. Het is vooral de bedoeling om zelf meer inzicht te krijgen in de variabelen in je dataset en de samenhang tussen die variabelen.

Op deze pagina vind je hoe je de samenhang tussen twee categorische variabelen kan beschrijven en visueel voorstellen.



2 De dataset

De dataset enquete bevat gegevens van 14 variabelen geobserveerd bij 42 Amerikaanse studenten die een vak statistiek volgen.

Deze dataset kan je inladen met read.csv(). De data kan je best meteen in een object enquete onderbrengen zodat je die later makkelijk opnieuw kan oproepen.

enquete <- read.csv("https://statlas.ugent.be/datasets/enquete.csv")


Met str() krijg je een opsomming van alle variabelen in de dataset. Je vindt er ook telkens bij om welk datatype het gaat. Afhankelijk van het datatype zal je sommige functies wel of juist niet kunnen gebruiken om je data te verkennen. Het heeft bijvoorbeeld geen zin om een gemiddelde te berekenen van een variabele van type chr.

str(enquete) 
'data.frame':   42 obs. of  14 variables:
 $ X          : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Section    : int  1 1 1 1 1 1 1 1 1 1 ...
 $ Class      : chr  "Senior" "Freshman" "Freshman" "Freshman" ...
 $ Sex        : chr  "F" "F" "F" "M" ...
 $ Distance   : int  400 450 3000 100 2000 500 1100 1000 400 450 ...
 $ Height     : int  62 61 61 72 69 73 60 71 70 75 ...
 $ Handedness : chr  "Right" "Left" "Right" "Right" ...
 $ Coins      : num  1.12 29 1.5 0.07 0.12 8 0.77 0 0 0 ...
 $ WhiteString: int  42 45 22 40 48 30 50 45 38 36 ...
 $ BlackString: int  6 5 4 4 7 8 0 6 0 12 ...
 $ Reading    : num  80 100 100 50 200 100 200 100 100 100 ...
 $ TV         : num  3 10 4 25 5 0 2 2 20 20 ...
 $ Pulse      : int  71 78 80 63 63 56 72 66 54 48 ...
 $ Texting    : int  3 100 2 200 100 1 50 30 40 25 ...


In de output van str() zie je inderdaad dat er 14 variabelen zijn met telkens 42 observaties.


Variabelen die je interesseren kan je hier eventueel al in een apart object opslaan.

klas <- enquete$Class
geslacht <- enquete$Sex



3 Kruistabel en visualisatie

Absolute frequentie


Met table() creëer je een kruistabel of bivariate frequentietabel waarbij je in elke cel de absolute frequentie kan aflezen.

table(klas, geslacht)
           geslacht
klas        F M
  Freshman  7 7
  Junior    3 8
  Senior    3 6
  Sophomore 4 4


Een belangrijk onderdeel van het verkennen van data bestaat erin om een visuele voorstelling te maken van de data. Hier tonen we hoe je dat kan doen in het R-basispakket.1

De functie barplot() kan je gebruiken op onderstaande manier. Als argument geef je een object van type table.

abs.freq <- table(klas, geslacht)

barplot(abs.freq, 
        col=c('green', 'blue', 'yellow', 'red')
        )

legend('topleft', 
       legend=levels(factor(klas)), # let op: variabele 'klas' moet van type factor zijn
       fill=c('green', 'blue', 'yellow', 'red'), 
       inset=c(0.1, 0.05), # positie van de legende aanpassen
       cex=0.7 # grootte van de legende
       )



Relatieve frequentie


Elke cel van de tabel hieronder bevat de proportie observaties ten opzichte van het totaal aantal observaties.

abs.freq <- table(klas, geslacht)
proportions(abs.freq)
           geslacht
klas                 F          M
  Freshman  0.16666667 0.16666667
  Junior    0.07142857 0.19047619
  Senior    0.07142857 0.14285714
  Sophomore 0.09523810 0.09523810


Kruistabellen waarbij de relatieve frequenties worden berekend per rij zijn ook mogelijk.

proportions(abs.freq, margin=1)
           geslacht
klas                F         M
  Freshman  0.5000000 0.5000000
  Junior    0.2727273 0.7272727
  Senior    0.3333333 0.6666667
  Sophomore 0.5000000 0.5000000


En natuurlijk ook per kolom.

proportions(abs.freq, margin=2)
           geslacht
klas                F         M
  Freshman  0.4117647 0.2800000
  Junior    0.1764706 0.3200000
  Senior    0.1764706 0.2400000
  Sophomore 0.2352941 0.1600000


Een belangrijk onderdeel van het verkennen van data bestaat erin om een visuele voorstelling te maken van de data. Hier tonen we hoe je dat kan doen in het R-basispakket.2

rel.freq <- proportions(abs.freq, margin=2)

barplot(rel.freq,
        col=c('green', 'blue', 'yellow', 'red')
        )

legend('bottomleft',
       legend=levels(factor(klas)), # let op: variabele 'klas' moet van type factor zijn
       fill=c('green', 'blue', 'yellow', 'red'), 
       inset=c(0.1,0.1), # locatie van de legende aanpassen
       cex=0.8
       )



4 Associatiematen

Cramer’s V is een maat voor de associatie of samenhang tussen twee categorische variabelen. Deze maat bouwt voort op \(\chi^2\). Cramer’s V kan alle waarden van 0 tot 1 aannemen. 0 wijst op de afwezigheid van associatie terwijl 1 wijst op een perfecte associatie.

Cramer’s V kan je niet berekenen in het basispakket van functies in R. Je zal het package vcd moeten installeren en laden.

install.packages("vcd") # eenmalig installeren
library(vcd) # package laden voor gebruik


Met de functie assocstats() kan je Cramer’s V nu laten berekenen. Let op: je moet een tabel aan de functie geven.

kruistabel <- table(klas, geslacht)
assocstats(kruistabel)
                    X^2 df P(> X^2)
Likelihood Ratio 1.8445  3  0.60530
Pearson          1.8148  3  0.61173

Phi-Coefficient   : NA 
Contingency Coeff.: 0.204 
Cramer's V        : 0.208 



5 Voetnoten


  1. Er bestaan ook R-packages die speciaal ontworpen zijn voor datavisualisatie. Het meest gebruikte heet ‘ggplot2’.↩︎

  2. Er bestaan ook R-packages die speciaal ontworpen zijn voor datavisualisatie. Het meest gebruikte heet ‘ggplot2’.↩︎